package com.wlz.consumer.consumer;

import com.wlz.api.DemoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;

/**
 *  服务降级
 * 1. mock=force:return+null 表示消费方对该服务的方法调用都直接返回 null 值，不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
 * 2. mock=fail:return+null 表示消费方对该服务的方法调用在失败后，再返回 null 值，不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
 *
 *  本地伪装
 *       1. mock = "true"
 *       2. mock = "com.wlz.api.DemoServiceMock"
 *
 *
 * @author wlz
 * @date 2022-07-12  10:44 下午
 */
@Slf4j
@EnableAutoConfiguration
public class MockDubboConsumerDemo {
//    @Reference(version = "timeout", timeout = 1000, mock = "force: return 123") // 服务降级
    @Reference(version = "timeout", timeout = 1000, mock = "true")  // 本地伪装
//    @Reference(version = "timeout", timeout = 1000, mock = "com.wlz.api.DemoServiceMock") // 本地伪装
    private DemoService demoService;

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MockDubboConsumerDemo.class, args);

        DemoService demoService = context.getBean(DemoService.class);

        // 服务调用超时时间为1秒，默认为3秒
        // 如果这1秒内没有收到服务结果，则会报错
        String result = demoService.sayHello("wlz 服务降级 ...");
        log.info("result:  {}", result);
    }
}
